package org.acb.sgp.service;

import java.util.List;
import org.acb.sgp.beans.*;

public interface DataAccessService {

    // METODOS DE "LOCACIONES"
    public void registrarLocacion(Locacion locacion);

    public void eliminarLocacion(Locacion locacion);

    public Locacion buscarLocacionPorCodigo(Integer codLocacion);

    public List<Locacion> buscarLocacionPorNombreCategoria(String nombre, Integer codCategoria);

    public List<Locacion> listaLocaciones();

    // METODOS DISTRITOS
    public void registrarDistrito(Distrito distrito);

    public void eliminarDistrito(Distrito distrito);

    public Distrito buscarDistritoPorCodigo(Integer codDistrito);

    public List<Distrito> listaDistritos();

    // METODOS CATEGORIAS
    public void registrarCategoria(CategoriaLocacion categoria);

    public void eliminarCategoria(CategoriaLocacion categoria);

    public CategoriaLocacion buscarCategoriaPorCodigo(Integer codCategoria);

    public List<CategoriaLocacion> listaCategorias();

    // METODOS PROGRAMAS
    public void registrarPrograma(Programa programa);

    public void eliminarPrograma(Programa programa);

    public Programa buscarProgramaPorCodigo(Integer codPrograma);

    public List<Programa> listaProgramas();

    // METODOS ESTADOS
    public void registrarEstado(Estado estado);

    public void eliminarEstado(Estado estado);

    public Estado buscarEstadoPorCodigo(Integer codEstado);

    public List<Estado> listaEstados();

    // METODOS EPISODIOS
    public void registrarEpisodio(Episodio episodio);

    public void eliminarEpisodio(Episodio episodio);

    public Episodio buscarEpisodioPorCodigo(Integer codEpisodio);

    public List<Episodio> listaEpisodios();

    public List<Episodio> buscarEpisodiosPorCodPrograma(Integer codPrograma);
    
    // METODOS GUIONES TECNICO
    public void registrarGuionTecnico(GuionTecnico guionTecnico);

    public void eliminarGuionTecnico(GuionTecnico guionTecnico);

    public GuionTecnico buscarGuionTecnicoPorEpisodioPrograma(Integer codEpisodio, Integer codPrograma);
    
    // METODOS ESCENAS
    public void registrarEscena(Escena escena);

    public void eliminarEscena(Escena escena);

    public Escena buscarEscenaPorCodigo(Integer codEscena);

    public List<Escena> buscarEscenasPorEpisodioPrograma(Integer codEpisodio, Integer codPrograma);
    
    // METODOS IMAGENES LOCACION
    public void registrarImagen(ImagenLocacion imagen);

    public void eliminarImagen(ImagenLocacion imagen);

    public void eliminarImagenesPorCodLocacion(Integer codLocacion);

    public List<ImagenLocacion> listaImagenes();

    public List<ImagenLocacion> listaImagenesPorCodLocacion(Integer codLocacion);

    // METODOS ACTORES
    public void registrarActor(Actor actor);
    
    public void eliminarActor(Actor actor);
    
    public List<Actor> buscarActoresPorCodEscena(Integer codEscena);
    
    public List<Actor> listaActores();
    
    // METODOS UTILERIAS
    public List<Utileria> buscarUtileriasPorCodEscena(Integer codEscena);
    
    // METODOS REGLAS
    public List<Regla> buscarReglas(Regla regla);
    
    public void registrarRegla(Regla regla);
    
    public void eliminarRegla(Regla regla);
    
    public List<Regla> listarTodasRegla();
    
    public List<String> evaluarRegla(Regla regla);
    
    // METODOS OBJETOS EVENTOS
    public List<ObjetoEvento> listaObjetoEvento();
    
    // METODOS PRESUPUESTOS
    public void registrarPresupuesto(Presupuesto presupuesto);

    public void eliminarPresupuesto(Presupuesto presupuesto);

    public Presupuesto buscarPresupuestoPorEpisodio(Integer codEpisodio);
    
    // METODOS DETALLESPRESUPUESTO
    public void registrarDetallePresupuesto(DetallePresupuesto detalle);

    public void eliminarDetallePresupuesto(DetallePresupuesto detallePresupuesto);

    public DetallePresupuesto buscarDetallePresupuestoPorCodigo(Integer codDetalle);

    public List<DetallePresupuesto> buscarDetallesPorCodPresupuesto(Integer codPresupuesto);
    
    // METODOS DETALLES ITEMS
    public void registrarDetalleItem(DetalleItem item);

    public void eliminarDetalleItem(DetalleItem item);

    public DetalleItem buscarDetalleItemPorCodigo(Integer codItem);

    public List<DetalleItem> buscarItemsPorCodDetalle(Integer codDetalle);
}
